﻿/**  
 *COPYRIGHT (C), yunshang. Co., Ltd.  
 *File NAME:      // h5plus.js APP端功能分装  引用hbulder H5+
 *Author:             
 *Date:           // tom 2018-02-09 
 *DESCRIPTION:    // 用于APP的H5+事件处理 基础函数封装
 *Others:         // 事件处理： 1.取消浏览器所有事件 
 *                          2.安卓返回键处理  
 *                          3.处理点击事件 =>打开新窗口/打开新窗口并执行函数
 *                          4.关闭等待框  
 *                          5.兼容性样式调整 
 *                          6.横竖屏切换的兼容性处理  
 *                          7.秒数转换"HH:MM:SS"
 *                          8.格式化日期时间字符串，格式为"YYYY-MM-DD HH:MM:SS"
 *                          9.隐藏滚动条
 **/

(function(w) {
    // 空函数
    function shield() {
        return false;
    }
    document.addEventListener('touchstart', shield, false); //取消浏览器的所有事件，使得active的样式在手机上正常生效
    document.oncontextmenu = shield; //屏蔽选择函数
    // H5 plus事件处理
    var ws = null,
        ass = 'pop-in';
    w.isPlus = false;

    function plusReady() {
        w.isPlus = true;
        ws = plus.webview.currentWebview();
        //隐藏滚动条
        plus.webview.currentWebview().setStyle({
            scrollIndicator: 'none'
        });

        // Android处理返回键
        plus.key.addEventListener('backbutton', function() {
            back();
        }, false);

        //ios8横竖屏切换的兼容性处理
        compatibleAdjust();
    }
    if(w.plus) {
        plusReady();
    } else {
        document.addEventListener('plusready', plusReady, false);
    }
    // DOMContentLoaded事件处理
    var domready = false;
    document.addEventListener('DOMContentLoaded', function() {
        domready = true;
        document.body.onselectstart = shield;
        compatibleAdjust();
    }, false);
    // 处理返回事件
    w.back = function(hide) {
        if(w.plus) {
            ws || (ws = plus.webview.currentWebview());
            if(hide || ws.preate) {
                ws.hide('auto');
            } else {
                ws.close('auto');
            }
        } else if(history.length > 1) {
            history.back();
        } else {
            w.close();
        }
    };
    // 处理点击事件
    var openw = null,
        waiting = null;
    /**
     * 打开新窗口
     * @param {URIString} id : 要打开页面url
     * @param {boolean} wa : 是否显示等待框
     * @param {boolean} ns : 是否不自动显示
     * @param {JSON} ws : Webview窗口属性
     */
    
    w.clicked = function(id, wa, ns, ws) {
        if(openw) { //避免多次打开同一个页面
            return null;
        }
        if(w.plus) {
            wa && (waiting = plus.nativeUI.showWaiting());
            ws = ws || {};
            ws.scrollIndicator || (ws.scrollIndicator = 'none');
            ws.scalable || (ws.scalable = false);
            var pre = ''; //'http://192.168.1.178:8080/h5/';
            var webViewId = id.replace(/\.html.*/ig, "");
            openw = plus.webview.create(pre + id, webViewId, ws);
            if(ns) {
                openw.addEventListener('rendered', function() { //页面加载完成后才显示
                    //setTimeout(function() { //延后显示可避免低端机上动画时白屏
                        openw.show(ass);
                        closeWaiting();
                    //}, 100);
                }, false);
            }
            openw.addEventListener('close', function() { //页面关闭后可再次打开
                openw = null;
            }, false);
            return openw;
        } else {
            var webViewId = id.replace(/\.html.*/ig, "");
            w.open(webViewId);
        }
        return null;
    };
    //打开固定页面 doc.html 并执行pageId页面的函数 pageJs
    w.openDoc = function(t, c, pageId, pageJs) {
        event.stopPropagation();
        event.preventDefault();
        var d = plus.webview.getWebviewById(pageId);
        if(d) {
            d.evalJS('updateDoc("' + t + '","' + c + '")');
        } else {
            d = plus.webview.create(pageId, pageId, {
                zindex: 9999,
                popGesture: 'hide'
            }, {
                preate: true
            });
            d.addEventListener('rendered', function() {
                d.evalJS('updateDoc("' + t + '","' + c + '")');
            }, false);
        }
    }
    /**
     * 关闭等待框
     */
    w.closeWaiting = function() {
        waiting && waiting.close();
        waiting = null;
    }
    // 兼容性样式调整
    var adjust = false;
    //横竖屏切换的兼容性
    function compatibleAdjust() {
        if(adjust || !w.plus || !domready) {
            return;
        } // iOS平台使用滚动的div
        if('iOS' == plus.os.name) {
            var t = document.getElementById("dcontent");
            t && (t.className = "sdcontent");
            t = document.getElementById("content");
            t && (t.className = "scontent");
            //iOS8横竖屏切换div不更新滚动问题
            var lasto = window.orientation;
            window.addEventListener("orientationchange", function() {
                var nowo = window.orientation;
                if(lasto != nowo && (90 == nowo || -90 == nowo)) {
                    window.dcontent && (0 == dcontent.scrollTop) && (dcontent.scrollTop = 1);
                    window.content && (0 == content.scrollTop) && (content.scrollTop = 1);
                }
                lasto = nowo;
            }, false);
        }
        adjust = true;
    };

            
    //  w.compatibleConfirm = function() {
    //      plus.nativeUI.confirm('本OS原生层面不提供该控件，需使用mui框架实现类似效果。请点击“确定”下载Hello mui示例', function(e) {
    //          if(0 == e.index) {
    //              plus.runtime.openURL("http://www.dcloud.io/hellomui/");
    //          }
    //      }, "", ["确定", "取消"]);
    //  }

    // 格式化时长字符串，格式为"HH:MM:SS"
    w.timeToStr = function(ts) {
        if(isNaN(ts)) {
            return "--:--:--";
        }
        var h = parseInt(ts / 3600);
        var m = parseInt((ts % 3600) / 60);
        var s = parseInt(ts % 60);
        return(ultZeroize(h) + ":" + ultZeroize(m) + ":" + ultZeroize(s));
    };
    // 格式化日期时间字符串，格式为"YYYY-MM-DD HH:MM:SS"
    w.dateToStr = function(d) {
        return(d.getFullYear() + "-" + ultZeroize(d.getMonth() + 1) + "-" + ultZeroize(d.getDate()) + " " + ultZeroize(d.getHours()) + ":" + ultZeroize(d.getMinutes()) + ":" + ultZeroize(d.getSeconds()));
    };
    /**
     * zeroize value with length(default is 2).
     * @param {Object} v
     * @param {Number} l
     * @return {String} 
     */
    w.ultZeroize = function(v, l) {
        var z = "";
        l = l || 2;
        v = String(v);
        for(var i = 0; i < l - v.length; i++) {
            z += "0";
        }
        return z + v;
    };
//      setInterval(function(){
//          for(var i=0 ;i <1000 ; i++){
//          }
//      },1000)
    
})(window);